//? JavaScript函数柯里化是一种将多参数函数转化为一系列单参数函数的技术。
//? 通过函数柯里化，我们可以将一个接受多个参数的函数转换为一系列只接受单个参数的函数，这样可以更加灵活地组合和复用函数。

//? 多参函数add
function add(a, b, c) {
    return a + b + c;
}
function curry(fn) {
    return function curried(...args) {
        //? 判断参数长度
        if (args.length >= fn.length) {
            // * 直接返回结果
            return fn.call(this,...args)
        }
        else {
            //? 长度不够 继续返回函数 因为需要继续调用，所以这里应该返回函数
            return function (...args2) {
                //? 带上新参数，重新执行curried函数 将其结果返回
                return curried.apply(this, args.concat(args2))
            }
        }
    }

}
const curriedAdd = curry(add)
console.log(curriedAdd(1,2)(3));
// console.log(curriedAdd(1,2,3));
// console.log(curriedAdd(1)(2)(3));
